package outputstream_;

/*
对象流: ObjectInputStream和ObjectOutputStream
看一个需求
1.将int num = 100这个int数据保存到文件中，注意不是100数字，而是int 100，并且，能够从文件中直接恢复int 100
2.将Dog dog = new Dog(“小黄”，3)这个 dog对象保存到文件中,并且能够从文件恢复.
3.上面的要求，就是能够将基本数据类型或者对象进行序列化和反序列化操作

序列化和反序列化
1.序列化就是在保存数据时,保存数据的值和数据类型
2.反序列化就是在恢复数据时，恢复数据的值和数据类型
3.需要让某个对象支持序列化机制，则必须让其类是可序列化的，为了让某个类是可序列化的,该
类必须实现如下两个接口之一:
Serializable  //这是一个标记接口 内部没有方法
Externalizable
 */

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;

/**
 * @author DCSGO
 * @version 1.0
 * 使用 ObjectOutputStream 保存基本数据类型和String
 */
public class ObjectOutputStream_ {
    public static void main(String[] args) throws IOException {
        //由于保存的数据是经过序列化的 所以文件的后缀可以为任意 但若是像txt等
        //有其实际意义以及用途的将一律无效
        String filePath = "C:\\Users\\Administrator\\Desktop\\Javacode\\java-learning-code\\chapter19\\src\\outputstream_\\data.dat";
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filePath));
        oos.writeInt(141);//int 装箱为 Integer -> 实现了 Serializable
        oos.writeChar('D');//char 装箱为 Character ->实现了 Serializable
        oos.writeBoolean(false);
        oos.writeUTF("假如没有联想？");//写 String
        oos.writeObject(new Dog("旺财", 3));
        //写入的对象必须实现了 Serializable 或 Externalizable 不然会抛 NotSerializableException 异常

        System.out.println("对象保存完毕...");
        oos.close();
    }
}

